import axios from 'axios'
import { ElMessage } from 'element-plus'
// 引入进度条插件
import NProgress from 'nprogress'
// 引入对应css样式
import 'nprogress/nprogress.css' 
import { Session } from './storage'
import router from '@/router'

// 对axios进行二次封装
const requests = axios.create({
  // 参考上一篇文章中的环境变量配置
  // baseURL: '/api',
  baseURL: '/ys-api',

  timeout: 10000,
})

// 添加请求拦截器
requests.interceptors.request.use(
  (config) => {
    // 成功之后做些什么
    NProgress.start(); // 开始显示进度条
    config.headers['Content-Type'] = 'application/json';
    const token = Session.get('token');
    if (token && config.url != '/login') {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config
  },
  (error) => {
    // 对请求错误做些什么
    NProgress.done();
    return Promise.reject(error)
  },
)

// 添加响应拦截器
requests.interceptors.response.use(
  (response) => {
    const url = response.config.url
    const token = Session.get('token');
    if (token) {
        response.config.headers['Authorization'] = `Bearer ${token}`;
      }
    if (url && !url.includes('/login')) {
      
      
    }
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    //config配置对象,headers属性请求头,经常给服务器端携带公共参数
    //返回配置对象
    NProgress.done()
    let message = ''

    const msg = response.data.msg

    switch (response.data.code) {
      case 500:
         ElMessage({
          type: 'error',
          message: msg,
        })
        break;
      case 1011008:
        router.push('/login')
         ElMessage({
          type: 'error',
          message: msg,
        })
        break;
      case 1012001:
        ElMessage({
          type: 'error',
          message: msg,
        })
        break;
      case 1011004:
        ElMessage({
          type: 'error',
          message: msg,
        })
        router.push({name:'Login'})
        break;
      default:
        
         break;
    }
    return response.data
  },
  (error) => {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    NProgress.done()
    let message = ''
    const status = error.response.status
    console.log('=======', error.response)
    
    switch (status) {
      
      case 401:
        message = 'token过期'
        break
      case 403:
        message = '无权访问'
        break
      case 404:

        router.push('/401')
        message = '请求地址错误'
        break
      case 500:
        message = '网络出现问题'
        break
      default:
        message = '无网络'
    }
    ElMessage({
      type: 'error',
      message: message,
    })
    return Promise.reject(error)
  },
)

export default requests


